<?php 
/**
 * 商品属性管理模型
 */
class GoodsAttrModel extends Model{
    public $table = 'goods_attr';
    
    public $auto = array();
    
    public $validate = array(
		
	);
    public function addAttr($gid){
//  	接收属性不存在的话就给一个空数组这样foreach循环不会报错
		$attr=isset($_POST['attr']) ? $_POST['attr']: array() ;
//		接收规格
		$spec=isset($_POST['spec']) ? $_POST['spec']: array() ;
//  	1.循环添加属性
    	foreach ($attr as $taid => $gvalue) {
 //  		如果用对应的value值那么就存入数据库   			
			if($gvalue){
				$this->add(
    				array(
    					'gvalue'=>$gvalue,
    					'taid'=>$taid,
						'gid'=>$gid,
					)
				);
			}
    	}
//		2.循环添加规格
		foreach ($spec as $taid => $v) {
			foreach ($v['avalue'] as $k=>$gvalue) {
				$this->add(
					array(
						'gvalue'=>$gvalue,
						'add'=>$v['add'][$k],
						'taid'=>$taid,
						'gid'=>$gid,
					)
				);	
			}
		}
		
		return true;
		
    }
	
	/**
	 * 通过gid获得商品属性值
	 */
    public function gidGetAttr($gids){
//		因为查询出来有好多都叫S、M、L号等各种属性所以进行了分组
    	$attr=$this->where("gid IN(" . implode(',', $gids) . ")")->group('gvalue')->all();
		$temp1=array();
		foreach ($attr as $v) {
			$temp1[$v['taid']][]=$v;
		}
		//让数组有类型属性名称和所对应的值
		$temp2=array();
		foreach ($temp1 as $taid => $v) {
			$temp2[]=array(
				'name'=>K('TypeAttr')->where("taid={$taid}")->getField('aname'),
				'value'=>$v
			);
		}
//		p($temp2);
		return $temp2;
    }


	/**
	 * 筛选商品
	 */
	public function filterGids($param,$gids){
		$gid=array();
		foreach ($param as $gaid) {
//			如果不是选择的不限
			if($gaid){
//			自关联查找点击属性gvalue一样的商品				
				$gid[]=M()->join('__goods_attr__ ga1 JOIN __goods_attr__ ga2 ON ga1.gvalue=ga2.gvalue')->where("ga1.gaid={$gaid}")->getField("ga2.gid",true);
			}
		}
//		如果查询出商品id和分配过来的所有的gids取交集
		if($gid){
//			前两个取交集的结果再和另外一个取交集
			foreach ($gid as $k => $v) {
				if($k==0){
//					给第一个临时变量数值
					$temp=$v;
				}else{
					$temp=array_intersect($temp, $v);
				}
			}
//			最后再和分配过来的gids取交集
			$gids=array_intersect($temp, $gids);
		}
		return $gids;
	}
 }
 
 
 
 
 
 
 
 
 
 
 








 ?>